#!/usr/bin/make -f

# Quoting Policy version 3.9.2.0, 2011-04-07 section 4.9:

# /start quote
# For some packages, notably ones where the same source tree is compiled in
# different ways to produce two binary packages, the build target does not make
# much sense. For these packages it is good enough to provide two (or more)
# targets (build-a and build-b or whatever) for each of the ways of building the
# package, and a build target that does nothing. The binary target will have to
# build the package in each of the possible ways and make the binary package out
# of each.
# ...
# When a package has a configuration and build routine which takes a long time,
# or when the makefiles are poorly designed, or when build needs to run clean
# first, it is a good idea to touch build when the build process is complete.
# This will ensure that if debian/rules build is run again it will not rebuild
# the whole program.
# /end quote

# Since that fits building I2P very well, we override the build target.
#

build:
	@echo 'The build target is disabled. Use the appropriate binary target.'

DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)

JAVA_HOME=/usr/lib/jvm/default-java

I2P=$(CURDIR)/pkg-temp
ROUTERVERSION=$(CURDIR)/router/java/src/net/i2p/router/RouterVersion.java
export DEB_BUILD_HARDENING=1

# I2P's version will be displayed in the router console as "$I2PVERSION-$EXTRAPREFIX$DEBIANVERSION", eg. 0.8.12-0-deb1
#export EXTRAPREFIX := deb
export JAVA_HOME I2P
export DEBIANVERSION := $(shell dpkg-parsechangelog |awk -F' ' '/^Version:/{print $$2}' |sed 's/.*-\([.0-9A-Za-z~+]\{1,\}\)$$/\1/')
# required for jbigi/jcpuid build
export BITS := $(shell dpkg-architecture -qDEB_HOST_ARCH_BITS)
#export DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU)

%:
	dh $@ --with systemd,bash-completion

clean: createcopyright

override_dh_auto_clean:
	-[ -r $(CURDIR)/debian/routerversion.java.bak ] && mv -f $(CURDIR)/debian/routerversion.java.bak $(ROUTERVERSION)
	dh_auto_clean
	ant distclean
	find $(CURDIR)/core \( -name '*\.so' -o -name '*\.o' \) -exec rm -f {} \;
	rm -rf $(CURDIR)/core/c/jcpuid/lib/
	rm -f $(CURDIR)/installer/lib/wrapper/all/wrapper.jar
	rm -rf $(CURDIR)/debian/python-i2p
	rm -f $(CURDIR)/override.properties
	rm -f $(CURDIR)/apps/susidns/src/lib/standard.jar
	rm -f $(CURDIR)/apps/susidns/src/lib/jstl.jar
	rm -f $(CURDIR)/apps/susidns/src/lib/jstlel.jar
	debconf-updatepo

override_dh_auto_build:

override_dh_systemd_enable:
	# We purposely do not set I2P to start at boot.
	# This matches the behavior of the initscript
	# and the setting RUN_DAEMON=false in /etc/default/i2p

binary-indep: build-indep
build-indep:
	dh_prep
	mkdir -p $(CURDIR)/installer/lib/wrapper/all
	ln -sf /usr/share/java/wrapper.jar $(CURDIR)/installer/lib/wrapper/all/wrapper.jar
	if [ ! -e $(CURDIR)/debian/routerversion.java.bak ]; then \
		cp $(ROUTERVERSION) $(CURDIR)/debian/routerversion.java.bak; \
	fi
ifeq "$(findstring deb,$(shell grep 'deb' $(ROUTERVERSION)))" ""
	sed -e "s/\(.*EXTRA\ =\ \)[^ ]*\"\(.*\)\"/\1\"-$$EXTRAPREFIX$$DEBIANVERSION\"/" < $(ROUTERVERSION) > $(ROUTERVERSION).tmp
	mv -f $(ROUTERVERSION).tmp $(ROUTERVERSION)
else
	@echo "Already found deb in version, not doing anything"
endif
	@# build options
	@/bin/echo -e "javac.release=11" > $(CURDIR)/override.properties
	@/bin/echo -e "build.built-by=launchpad" >> $(CURDIR)/override.properties
	@/bin/echo -e "build.reproducible=true" >> $(CURDIR)/override.properties

	@# debian and ubuntu: everywhere
	@/bin/echo -e "with-geoip-database=true" >> $(CURDIR)/override.properties

	@# No Jetty 12 in Ubuntu

	@# following two are formerly from libservlet3.1-java, now in their own packages
	ln -sf /usr/share/java/servlet-api.jar $(CURDIR)/apps/jetty/jettylib/javax.servlet.jar
	@# this is roughly the same as tomcat8-jsp-api.jar, we use this one
	ln -sf /usr/share/java/jsp-api.jar $(CURDIR)/apps/jetty/jettylib/jsp-api.jar

	@# ubuntu: plucky+
	@# debian: trixie+
	@# the libslf4j2-java package does NOT provide a non-versioned file except in the maven-repo dir
	@/bin/echo -e "with-libslf4j2-java=true" >> $(CURDIR)/override.properties
	ln -sf /usr/share/maven-repo/org/slf4j/slf4j-api/2.x/slf4j-api-2.x.jar $(CURDIR)/apps/jetty/jettylib/slf4j2-api.jar

	@# debian and ubuntu: buster, disco
	@/bin/echo -e "with-libtomcat9-java=true" >> $(CURDIR)/override.properties
	mkdir -p $(CURDIR)/apps/jetty/jettylib
	ln -sf /usr/share/java/tomcat9-api.jar $(CURDIR)/apps/jetty/jettylib/tomcat-api.jar
	ln -sf /usr/share/java/tomcat9-coyote.jar $(CURDIR)/apps/jetty/jettylib/tomcat-coyote.jar
	ln -sf /usr/share/java/tomcat9-el-api.jar $(CURDIR)/apps/jetty/jettylib/commons-el.jar
	ln -sf /usr/share/java/tomcat9-jasper.jar $(CURDIR)/apps/jetty/jettylib/jasper-runtime.jar
	ln -sf /usr/share/java/tomcat9-jasper-el.jar $(CURDIR)/apps/jetty/jettylib/jasper-el.jar
	ln -sf /usr/share/java/tomcat9-juli.jar $(CURDIR)/apps/jetty/jettylib/commons-logging.jar
	ln -sf /usr/share/java/tomcat9-util.jar $(CURDIR)/apps/jetty/jettylib/tomcat-util.jar
	ln -sf /usr/share/java/tomcat9-util-scan.jar $(CURDIR)/apps/jetty/jettylib/tomcat-util-scan.jar

	@# debian and ubuntu: stretch+, zesty+
	@/bin/echo -e "with-libtaglibs-standard=true" >> $(CURDIR)/override.properties
	ln -sf /usr/share/java/taglibs-standard-spec.jar $(CURDIR)/apps/susidns/src/lib/jstl.jar
	ln -sf /usr/share/java/taglibs-standard-impl.jar $(CURDIR)/apps/susidns/src/lib/standard.jar
	ln -sf /usr/share/java/taglibs-standard-jstlel.jar $(CURDIR)/apps/susidns/src/lib/jstlel.jar

	@# debian and ubuntu: everywhere
	@/bin/echo -e "with-gettext-base=true" >> $(CURDIR)/override.properties
	@mkdir -p $(CURDIR)/core/java/build
	ln -sf /usr/share/java/libintl.jar $(CURDIR)/core/java/build/libintl.jar

	@# debian and ubuntu: everywhere
	@/bin/echo -e "with-libgetopt-java=true" >> $(CURDIR)/override.properties
	@mkdir -p $(CURDIR)/core/java/build
	ln -sf /usr/share/java/gnu-getopt.jar $(CURDIR)/core/java/build/gnu-getopt.jar

	@# debian: jessie+; ubuntu: trusty+
	@/bin/echo -e "with-libjson-simple-java=true" >> $(CURDIR)/override.properties
	@mkdir -p $(CURDIR)/core/java/build
	ln -sf /usr/share/java/json-simple.jar $(CURDIR)/core/java/build/json-simple.jar

	@# 1.80 or higher debian: trixie+; ubuntu: questing+
	@/bin/echo -e "with-libbcprov-java=true" >> $(CURDIR)/override.properties
	@mkdir -p $(CURDIR)/router/java/build
	ln -sf /usr/share/java/bcprov.jar $(CURDIR)/router/java/build/bcprov.jar

	@# debian: everywhere; ubuntu: trusty+
	@/bin/echo -e "with-famfamfam-flag-png=true" >> $(CURDIR)/override.properties

	TZ=UTC JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF8 ant preppkg-unix javadoc
	echo router.updateDisabled=true > $(I2P)/router.config
	mv $(I2P)/runplain.sh $(I2P)/i2prouter-nowrapper

binary-arch: build-arch
build-arch:
	# build jbigi
	cd $(CURDIR)/core/c/jbigi && ./build_jbigi.sh dynamic
	# build jcpuid
	cd $(CURDIR)/core/c/jcpuid && ./build.sh

binary: binary-arch binary-indep

createcopyright:
	@echo " *** Creating debian/copyright*** "
	@rm -f $(CURDIR)/debian/copyright
	@/bin/echo -e "This package was Debianized by kytv <killyourtv@i2pmail.org>" >> $(CURDIR)/debian/copyright
	@/bin/echo -e "Sun, 23 Jan 2011 20:26:51 +0000" >> $(CURDIR)/debian/copyright
	@/bin/echo -e "\nIt was downloaded from https://geti2p.net" >> $(CURDIR)/debian/copyright
	@/bin/echo -e "\nI2P is tracked upstream using the Monotone VCS" >> $(CURDIR)/debian/copyright
	@/bin/echo -e "Complete information on fetching the source with monotone can be found" >> $(CURDIR)/debian/copyright
	@/bin/echo -e "at https://geti2p.net/newdevelopers#getting-the-i2p-code\n\n\n" >> $(CURDIR)/debian/copyright
	@/bin/cat $(CURDIR)/LICENSE.txt >> $(CURDIR)/debian/copyright
	@/bin/echo -e "\n\n The debian packaging has been released into the public domain." >> $(CURDIR)/debian/copyright

override_dh_compress:
	dh_compress -X.xsl -X.xml

override_dh_install:
	dh_install --list-missing
	dh_apparmor --profile-name=system_i2p -pi2p
	dh_apparmor --profile-name=usr.bin.i2prouter -pi2p

override_dh_installchangelogs:
	dh_installchangelogs history.txt

override_dh_installdocs:
	dh_installdocs -pi2p --link-doc=i2p-router
	dh_installdocs --remaining-packages

override_dh_shlibdeps:
	dh_shlibdeps -llibjbigi-jni debian/libjbigi-jni/usr/lib/jni/*.so

#override_dh_installinit:
#	dh_installinit -r

get-orig-source:
	uscan --verbose --rename --destdir $(CURDIR)/.. --watchfile debian/watch --force-download
